package br.com.ordemservico.model;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.persistence.*;

/**
 * Entity implementation class for Entity: OrdemServico
 *
 */
@Entity
@NamedQuery(name="OS.findAll", query="select c from OrdemServico c")
public class OrdemServico implements Serializable {

	
	private static final long serialVersionUID = 1L;
	@Id
	@SequenceGenerator(name="OS_IDOS_GENERATOR", sequenceName="OS_ID_OS_SEQ", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="OS_IDOS_GENERATOR")
	private long id_os;
	@Column
	private String contato;
	@Column
	private String telefone;
	@Column
	private String status;
	@Temporal(value = TemporalType.DATE)
	private Date dataEntrada;
	@Temporal(value = TemporalType.DATE)
	private Calendar dataSaida;
	@Column
	private String horaEntrada;
	@Column
	private String horaSaida;
	@Column
	private double desconto;
	@Column
	private double total;
	@ManyToOne
	private Cliente cliente;
	@ManyToOne
	private Veiculo veiculo;
	@Column
	private String pagamento;
	@Column
	private String problema;
	@ManyToMany
	@JoinTable (name="Lista_Servicos" , 
	joinColumns={
			@JoinColumn(name="id_os")},
	inverseJoinColumns={
			@JoinColumn(name="id_servico")})
	private List<Servico> listaServico;
	@OneToMany(mappedBy="ordemServico",cascade=CascadeType.ALL)
	private List<Pedido> pedido;
	
	
	public OrdemServico() {
		super();
	}


	public long getId_os() {
		return id_os;
	}


	public void setId_os(long id_os) {
		this.id_os = id_os;
	}


	public String getContato() {
		return contato;
	}


	public void setContato(String contato) {
		this.contato = contato.toUpperCase();
	}


	public String getTelefone() {
		return telefone;
	}


	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}


	public String getStatus() {
		return status;
	}


	public void setStatus(String status) {
		this.status = status.toUpperCase();
	}


	public Date getDataEntrada() {
		return dataEntrada;
	}


	public void setDataEntrada(Date date) {
		this.dataEntrada = date;
	}


	public Calendar getDataSaida() {
		return dataSaida;
	}


	public void setDataSaida(Calendar dataSaida) {
		this.dataSaida = dataSaida;
	}


	public String getHoraEntrada() {
		return horaEntrada;
	}


	public void setHoraEntrada(String horaEntrada) {
		this.horaEntrada = horaEntrada;
	}


	public String getHoraSaida() {
		return horaSaida;
	}


	public void setHoraSaida(String horaSaida) {
		this.horaSaida = horaSaida;
	}


	public double getDesconto() {
		return desconto;
	}


	public void setDesconto(double desconto) {
		this.desconto = desconto;
	}


	public double getTotal() {
		return total;
	}


	public void setTotal(double total) {
		this.total = total;
	}


	public Cliente getCliente() {
		return cliente;
	}


	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}


	public Veiculo getVeiculo() {
		return veiculo;
	}


	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}


	public String getPagamento() {
		return pagamento;
	}


	public void setPagamento(String pagamento) {
		this.pagamento = pagamento.toUpperCase();
	}


	public String getProblema() {
		return problema;
	}


	public void setProblema(String problema) {
		this.problema = problema.toUpperCase();
	}


	public List<Pedido> getPedido() {
		return pedido;
	}


	public void setPedido(List<Pedido> pedido) {
		this.pedido = pedido;
	}


	public List<Servico> getListaServico() {
		return listaServico;
	}


	public void setListaServico(List<Servico> listaServico) {
		this.listaServico = listaServico;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
		result = prime * result + (int) (id_os ^ (id_os >>> 32));
		result = prime * result + ((veiculo == null) ? 0 : veiculo.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		OrdemServico other = (OrdemServico) obj;
		if (cliente == null) {
			if (other.cliente != null)
				return false;
		} else if (!cliente.equals(other.cliente))
			return false;
		if (id_os != other.id_os)
			return false;
		if (veiculo == null) {
			if (other.veiculo != null)
				return false;
		} else if (!veiculo.equals(other.veiculo))
			return false;
		return true;
	}


	@Override
	public String toString() {
		return "OrdemServico [id_os=" + id_os + ", contato=" + contato
				+ ", telefone=" + telefone + ", status=" + status
				+ ", dataEntrada=" + dataEntrada + ", dataSaida=" + dataSaida
				+ ", horaEntrada=" + horaEntrada + ", horaSaida=" + horaSaida
				+ ", desconto=" + desconto + ", total=" + total + ", cliente="
				+ cliente + ", veiculo=" + veiculo + ", pagamento=" + pagamento
				+ ", problema=" + problema + ", listaServico=" + listaServico
				+ ", pedido=" + pedido + "]";
	}
	
	
}
